﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using itau.im.entidade;
using System.Collections;
using System.Data;

namespace itau.im.dado
{

    public interface IExecucaoCurvaDAO
    {
    
        #region Métodos

        //IList<RegistroExecucaoCurva> ObterRegistrosExecucaoCurvaLikeNome(DateTime dataInicio, DateTime dataFim, int codigoTipoCurva, int codigoModalidade, string nomeCurva, int codigoSituacao);
        IList<RegistroExecucaoCurva> ObterRegistrosExecucaoCurvaLikeNome(DateTime dataInicio, DateTime dataFim, int codigoTipoCurva, int codigoModalidade, string nomeCurva, int codigoSituacao, int codigoMoeda, int codigoTipoEntradaDado, int codigoSubMesa, int codigoCategoriaMercado);

        void PersistirExecucao(IList<CurvaExecucaoPonto> vertices, RegistroExecucaoCurva registroExecucao);

        IList<RegistroExecucaoCurva> ObterRegistrosExecucaoCurva(int codigoCurva, DateTime dataHoraExecucao, int codigoSituacao);

        IList<RegistroExecucaoCurva> ObterRegistrosExecucaoCurva(DateTime dataHoraFim, int codigoSituacaoInicio, int codigoSituacaoFim);

        IList<RegistroExecucaoCurva> ObterRegistrosExecucaoCurvaTransferPrice(DateTime dataHoraFim, int codigoSituacaoInicio, int codigoSituacaoFim);

        IList<RegistroExecucaoCurva> ObterRegistrosExecucaoCurvaPricingBIHF(DateTime dataHoraFim, int codigoSituacaoInicio, int codigoSituacaoFim);

        IList<RegistroExecucaoCurva> ObterRegistrosExecucaoCurva(DateTime dataHoraFim, int codigoSituacaoInicio, int codigoSituacaoFim, int codigoTipoCurva);

        IList<RegistroExecucaoCurva> ObterRegistrosExecucaoCurvaPorCurvaVigente(int curvaVigenteID);

        void AtualizarCurvaExecucaoPontos(IList<CurvaExecucaoPonto> vertices);

        void AtualizarRegistroExecucaoCurva(RegistroExecucaoCurva registroExecucaoCurva);

        IList<CurvaExecucaoPonto> ObterCurvaExecucaoPontos(int curvaID, DateTime dataInclusaoVigencia, DateTime dataHoraExecucaoCurva);

        DataSet ObterCurvaExecucaoPontosDataSet(int curvaID, DateTime dataInclusaoVigencia, DateTime dataHoraExecucaoCurva, DateTime dataLimite);

        IList<CurvaExecucaoPonto> ObterCurvaExecucaoPontosAnaliseRetida(int curvaID, DateTime dataInclusaoVigencia, DateTime dataHoraExecucaoCurva);

        RegistroExecucaoCurva ObterUltimaExecucaoCurva(int curvaID, DateTime dataReferencia, int codigoSituacao);

        RegistroExecucaoCurva ObterRegistroExecucaoCurva(int codCurva, DateTime dataInclusao, DateTime dataReferencia, int codigoSituacao);

        RegistroExecucaoCurva ObterUltimaExecucaoCurvaVigente(int curvaID, DateTime dataInclusaoVigencia, DateTime dataReferencia, int codigoSituacao);

        RegistroExecucaoCurva ObterUltimaExecucaoCurva(int codigoCurva, DateTime dataInclusaoVigencia, DateTime dataHoraExecucao, int codigoSituacaoRejeitado);

        RegistroExecucaoCurva ObterRegistroExecucaoCurva(int codigoCurva, DateTime dataInclusaoVigencia);

        void CriarRegistroExecucaoCurva(RegistroExecucaoCurva registroExecucaoCurva);

        void CriarCurvaExecucaoPonto(CurvaExecucaoPonto listaCurvaExecucaoPonto);

        void CriarCurvaExecucaoPontos(IList<CurvaExecucaoPonto> vertices);

        void CriarOuAtualizarCurvaExecucaoPonto(CurvaExecucaoPonto listaCurvaExecucaoPonto);

        IList<LiberacaoCurva> ObterCurvasPorTipoMesaCategoriaSituacao(int tipoCurvaID, int subMesaID, int categoriaMercadoID, int codigoSituacao);

        IList<LiberacaoCurva> ObterCurvasPorTipoMesaCategoriaSituacaoData(int tipoCurvaID, int subMesaID, int categoriaMercadoID, int codigoSituacao, DateTime dataReferencia);

        IList<LiberacaoCurva> ObterCurvasParaLiberacaoRejeicaoConsulta(int codigoTipoCurva, int codigoSubMesa, int codigoCategoriaMercado, int codigoModalidade, int codigoSituacao, int codigoMoeda, int codigoTipoEntradaDado, string nomeCurva, DateTime dataHoraInicio, DateTime dataHoraFim);

        RegistroExecucaoCurva ObterRegistroExecucaoCurva(int codigoCurva, DateTime dataInclusaoVigencia, DateTime dataHoraExecucaoCurva);

        void CriarAgendamentoDasCurvasAtivas(DateTime dataHoraAtual, int codigoSituacao, int codigoTipoEventoNotificacao, DateTime dataHoraLiberacaoCurva);

        void RemoverCurvaExecucaoPontos(RegistroExecucaoCurva registroExecucaoCurva, int indicadorVertice);

        void AlterarExecucaoRemoverPontos(RegistroExecucaoCurva registro);

        void CriarCurvaExecucaoPontosEmLote(IList<CurvaExecucaoPonto> vertices);

        void CriarCurvaExecucaoPontosEmLote(IList<CurvaExecucaoPonto> vertices, string nomeProcedure);

        void AtualizarSituacaoRegistrosExecucaoCurva(int codigoCurva, DateTime dataExecucao, int codigoSituacaoAtual, int codigoSituacaoNova);

        #endregion

    }
}
